using System.Collections;
using System.Collections.Generic;
using Game;
using UnityEngine;

/**
 * 游戏初始化器基类 (GameInitializer)
 * 
 * 功能说明：
 * - 提供游戏初始化的扩展点
 * - 支持多个初始化器按优先级执行
 * - 使用策略模式，便于添加新的初始化逻辑
 * 
 * 设计模式：
 * - 策略模式 (Strategy Pattern)
 * - 模板方法模式 (Template Method Pattern)
 * 
 * 使用方式：
 * 1. 继承此类创建具体的初始化器
 * 2. 重写Initialize方法实现具体逻辑
 * 3. 设置Priority控制执行顺序
 * 4. 作为组件添加到GameApp对象上
 */
public abstract class GameInitializer : MonoBehaviour
{
    /**
     * 初始化优先级
     * 
     * 说明：
     * - 优先级越高，越先初始化
     * - 默认优先级为0
     * - 数值越小优先级越高
     * 
     * 使用场景：
     * - 系统初始化器：优先级最高（如：-100）
     * - 核心模块初始化器：高优先级（如：-50）
     * - 普通模块初始化器：默认优先级（如：0）
     * - UI初始化器：低优先级（如：50）
     * - 最后清理初始化器：最低优先级（如：100）
     */
    public int Priority { get; private set; } = 0;

    /**
     * 初始化方法
     * 
     * 功能：
     * - 执行具体的初始化逻辑
     * - 由GameApp在启动时调用
     * - 子类必须重写此方法
     * 
     * 参数：
     * - gameApp: 游戏主应用实例，提供全局访问点
     * 
     * 设计说明：
     * - 使用抽象方法强制子类实现
     * - 传入GameApp参数便于访问全局状态
     * - 支持异步初始化（通过协程）
     */
    public abstract void Initialize(GameApp gameApp);
}
